import axios from "axios";
import { ElMessage } from "element-plus";
//引入用户小仓库
import useUserInfo from "@/store/modules/user";

//利用axios的create方法创建一个实例,它会返回一个axios的实例(和axios一样,只不过加了一些东西)
let request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  //设置超时的时间
  timeout: 5000,
});
//请求拦截器，它有一个config的参数,必须将config返回，否则连请求都发不出去
request.interceptors.request.use((config) => {
  //获取仓库数据
  let userStore = useUserInfo();
  //发送请求时，通过请求头携带token
  if (userStore.token) {
    config.headers.token = userStore.token;
  }
  return config;
});
//响应拦截器，它有成功和失败两个回调
request.interceptors.response.use(
  (res) => {
    //成功的回调，返回响应体，简化数据
    return res.data;
  },
  //失败的回调，会注入一个err的错误参数，可以通过err这个参数知道自己的错误
  (err) => {
    let message = "";
    //定义一个变量接收响应状态码
    let code = err.response.status;
    switch (code) {
      case 400:
        message = "请求错误";
        break;
      case 401:
        message = "未授权，请登录";
        break;
      case 403:
        message = "拒绝访问";
        break;
      case 404:
        message = `请求地址出错: ${err.response.config.url}`;
        break;
      case 408:
        message = "请求超时";
        break;
      case 500:
        message = "服务器内部错误";
        break;
      case 501:
        message = "服务未实现";
        break;
      default:
        message = "网络出现问题";
        break;
    }
    ElMessage({
      type: "error",
      message,
    });
    //必须返回一个失败的promise来终止它
    return Promise.reject(err);
  },
);
export default request;
